package com.shuai.analysis.config;

import com.shuai.common.constant.RabbitMQExchangeEnum;
import com.shuai.common.constant.RabbitQueueEnum;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MessageQueueConfig {

    /**
     * 声明本项目使用的通用direct交换机
     */
    @Bean
    public DirectExchange directExchange() {
        return ExchangeBuilder.directExchange(RabbitMQExchangeEnum.COMMON_EXCHANGE_DIRECT_XS_AI_STATION.name).build();
    }

    /**
     * 声明队列
     */
    @Bean
    public Queue commonQueue() {
        return QueueBuilder.durable(RabbitQueueEnum.COMMON_QUEUE_XS_AI_STATION.name).lazy().build();
    }

    /**
     * 交换机绑定队列
     */
    @Bean
    public Binding bindingCommonQueueToExchange() {
        // 在进行下面的两个方法调用时，本质上并不是重新执行了一遍
        // Spring对标注了Bean对象的方法进行了动态代理，
        // 在手动进行方法调用时，会首先检查Spring中是否有方法返回的Bean对象
        // 如果有，则直接返回这个Bean对象，而不会重新调用方法执行方法逻辑返回一个新的Bean对象
        return BindingBuilder.bind(commonQueue()).to(directExchange()).with(RabbitQueueEnum.COMMON_QUEUE_XS_AI_STATION.routingKey);
    }
}
